#pragma once

#include <iostream>
#include <string>
#include "util.hpp"

using namespace ns_util;

namespace ns_log
{
    // 日志等级
    enum
    {
        INFO,
        DEBUG,
        WARRING,
        ERROR,
        FATAL
    };

    // 日志总是被调用，函数调用比较慢，内联快
    inline std::ostream &log(const std::string &level, const std::string &file_name, int line)
    {
        // 添加日志等级
        std::string message = "[";
        message += level;
        message += "]";

        // 添加文件名
        message += "[";
        message += file_name;
        message += "]";

        // 添加所在行
        message += "[";
        message += std::to_string(line);
        message += "]";

        // 添加日志时间戳
        message += "[";
        message += TimeUtil::GetTimeStamp();
        message += "]";
        
        // cout 本质 内部是包含缓冲区的
        std::cout << message; //不要endl进行刷新

        return std::cout;
    }
    // LOG(INFO) << "message" << "\n"
    // 开放式日志
    #define LOG(level) log(#level/*宏参数中#n，可以将数字以字符串的形式展示*/,\
                            __FILE__/*宏，调用处所在文件名*/, __LINE__/*宏，调用处所在行*/)
}